package middleware

import (
	"github.com/gofiber/fiber/v2"

	"fiber/global"
	"fiber/helper"
)

/*
*
处理分页参数
*/
func SetPage() fiber.Handler {

	return func(c *fiber.Ctx) error {
		p := new(global.Page)

		// 此处只能使用query传参，若使用body，则每个接口都必须传page参数, 否则会报错
		if err := c.QueryParser(p); err != nil {
			// return err  // 这种错误会被扔进错误处理里面...

			// 自定义错误返回
			return helper.Fail(c, err.Error(), global.QueryErrorStatus)

			// 错了不管， 使用默认值则注释上面

		}

		// 计算PageStart的值
		if p.Page == 0 {
			p.Page = 1
		}
		if p.PageSize == 0 {
			p.PageSize = 15
		}
		p.PageStart = p.PageSize * (p.Page - 1)

		// 传入下文
		c.Locals("page", p)

		return c.Next()
	}

}
